package com.icen.utils.comm;

import java.io.File;

import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.net.Uri;

/**
 * Package Utils Class
 * 
 * @author IcenHan
 * 
 */
public class PackageUtils {

	/**
	 * 获取当前应用程序包名
	 * 
	 * @param context
	 *            上下文
	 * @return String
	 */
	public static String getPkgName(Context context) {
		return context.getApplicationContext().getPackageName();
	}

	/**
	 * 根据包名判断一个应用程序是否存在
	 * 
	 * @param context
	 *            上下文
	 * @param packageName
	 *            需要判断的包名
	 * @return boolean
	 */
	public static boolean isHasPkg(Context context, String packageName) {
		if (ValidateUtils.isEmpty(packageName)) {
			return false;
		}

		try {
			context.getPackageManager().getApplicationInfo(packageName,
					PackageManager.GET_UNINSTALLED_PACKAGES);
			return true;
		} catch (Exception e) {
			return false;
		}
	}

	/**
	 * 安装APK文件
	 * 
	 * @param filePath
	 *            文件路径
	 * @param fileName
	 *            文件名称
	 * @return boolean
	 *         <p>
	 *         false:表示文件不存在
	 *         </p>
	 */
	public static boolean installPkg(Context context, String filePath,
			String fileName) {
		File apkFile = new File(filePath, fileName);
		if (apkFile.exists()) {
			// 通过Intent安装APK文件
			Intent intent = new Intent(Intent.ACTION_VIEW);
			intent.setDataAndType(Uri.parse("file://" + apkFile.toString()),
					"application/vnd.android.package-archive");
			context.startActivity(intent);
			return true;
		} else {
			return false;
		}
	}

	/**
	 * 获取AndroidManifest配置文件中MetaData的值
	 * 
	 * @param context
	 *            上下文
	 * @param keyName
	 * @return Object
	 */
	public static Object getMetaDataValue(Context context, String keyName) {
		try {
			Context _context = context.getApplicationContext();
			return _context.getPackageManager().getApplicationInfo(
					_context.getPackageName(), PackageManager.GET_META_DATA).metaData
					.get(keyName);
		} catch (NameNotFoundException e) {
			return null;
		}
	}

	/**
	 * 获取AndroidManifest配置文件中MetaData的值: int
	 * 
	 * @param context
	 * @param keyName
	 * @return int
	 */
	public static int getMetaValueByInt(Context context, String keyName) {
		return PackageUtils.getMetaValueByInt(context, keyName, -1);
	}

	/**
	 * 获取AndroidManifest配置文件中MetaData的值: int
	 * 
	 * @param context
	 * @param keyName
	 * @param defaultValue
	 * @return int
	 */
	public static int getMetaValueByInt(Context context, String keyName,
			int defaultValue) {
		Object obj = PackageUtils.getMetaDataValue(context, keyName);
		return obj == null ? defaultValue : (int) obj;
	}

	/**
	 * 获取AndroidManifest配置文件中MetaData的值: String
	 * 
	 * @param context
	 * @param keyName
	 * @return String
	 */
	public static String getMetaValueByString(Context context, String keyName) {
		return PackageUtils.getMetaValueByString(context, keyName, "");
	}

	/**
	 * 获取AndroidManifest配置文件中MetaData的值: String
	 * 
	 * @param context
	 * @param keyName
	 * @param defaultValue
	 * @return String
	 */
	public static String getMetaValueByString(Context context, String keyName,
			String defaultValue) {
		Object obj = PackageUtils.getMetaDataValue(context, keyName);
		return obj == null ? defaultValue : (String) obj;
	}

	/**
	 * 获取AndroidManifest配置文件中MetaData的值: boolean
	 * 
	 * @param context
	 * @param keyName
	 * @return boolean
	 */
	public static boolean getMetaValueByBoolean(Context context, String keyName) {
		return PackageUtils.getMetaValueByBoolean(context, keyName, false);
	}

	/**
	 * 获取AndroidManifest配置文件中MetaData的值: boolean
	 * 
	 * @param context
	 * @param keyName
	 * @param defaultValue
	 * @return boolean
	 */
	public static boolean getMetaValueByBoolean(Context context,
			String keyName, boolean defaultValue) {
		Object obj = PackageUtils.getMetaDataValue(context, keyName);
		return obj == null ? defaultValue : (boolean) obj;
	}
}
